#include <iostream>
using namespace std;

/*
	单例： 在程序运行期间永远保证只有一个实例对象
	
		1 构造函数私有化   ---->禁止外界创建对象------>在类的内部创建对象
		2 提供一个公开的接口方法
			唯一实例的对象只能在堆上创建
			定义一个成员属性用来保存唯一实例的地址
*/

class Sigle{
private:
	Sigle(){ cout << "Sigle" << endl; }
	static Sigle* instance;
public:
	static Sigle* getInstance()
	{
		if(instance == 0)
			instance = new Sigle();
		return instance;
	}
};

//定义
Sigle* Sigle::instance = 0;

int main(int argc, char **argv)
{
	Sigle* ins1 = Sigle::getInstance();
	Sigle* ins2 = Sigle::getInstance();
	Sigle* ins3 = Sigle::getInstance();
	Sigle* ins4 = Sigle::getInstance();
	
	cout << ins1 << ", " << ins2 << ", " << ins3 << ", " << ins4 << endl;

	return 0;
}
